package com.example.mvpframe.provider.utils;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import com.tchhy.provider.BuildConfig;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Logger {
//    public static boolean isDebug = BuildConfig.DEBUG;// 是否需要打印bug
    public static boolean isDebug = true;// 是否需要打印bug
    private static final String TAG = "tchhy";
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
    private static File logFile = null;
    private static Date date = new Date();

    public static void init(Context context) {
        if (!isDebug && Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) {
            String path = context.getExternalFilesDir(null).getPath() + "/tchhy";
            File dir = new File(path);
            if (dir.exists() && dir.isDirectory()) {
                logFile = new File(path + "/tchhy.txt");
                if (!logFile.exists()) {
                    try {
                        logFile.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        }
    }

    // 下面四个是默认tag的函数
    public static void i(String msg) {
        if (isDebug) {
            Log.i(TAG, msg);
        } else {
            writeToFile('I', TAG, msg);
        }
    }

    public static void d(String msg) {
        if (isDebug) {
            Log.d(TAG, msg);
        } else {
            writeToFile('D', TAG, msg);
        }
    }

    public static void e(String msg) {
        if (isDebug) {
            Log.e(TAG, msg);
        } else {
            writeToFile('E', TAG, msg);
        }
    }

    public static void v(String msg) {
        if (isDebug) {
            Log.v(TAG, msg);
        } else {
            writeToFile('V', TAG, msg);
        }
    }

    // 下面是传入类名打印log
    public static void i(Class<?> _class, String msg) {
        if (isDebug) {
            Log.i(_class.getName(), msg);
        } else {
            writeToFile('I', _class.getName(), msg);
        }
    }

    public static void d(Class<?> _class, String msg) {
        if (isDebug) {
            Log.d(_class.getName(), msg);
        } else {
            writeToFile('D', _class.getName(), msg);
        }
    }

    public static void e(Class<?> _class, String msg) {
        if (isDebug) {
            Log.e(_class.getName(), msg + " ");
        } else {
            writeToFile('E', _class.getName(), msg);
        }
    }

    public static void v(Class<?> _class, String msg) {
        if (isDebug) {
            Log.v(_class.getName(), msg);
        } else {
            writeToFile('V', _class.getName(), msg);
        }
    }

    // 下面是传入自定义tag的函数
    public static void i(String tag, String msg) {
        if (isDebug) {
            Log.i(tag, msg + " ");
        } else {
            writeToFile('I', tag, msg);
        }
    }

    public static void d(String tag, String msg) {
        if (isDebug) {
            Log.d(tag, msg + " ");
        } else {
            writeToFile('D', tag, msg);
        }
    }

    public static void e(String tag, String msg) {
        if (isDebug) {
            Log.e(tag, msg + " ");
        } else {
            writeToFile('E', tag, msg);
        }
    }

    public static void v(String tag, String msg) {
        if (isDebug) {
            Log.v(tag, msg + " ");
        } else {
            writeToFile('V', tag, msg);
        }
    }

    /**
     * 将log信息写入文件中
     *
     * @param type
     * @param tag
     * @param msg
     */
    private static void writeToFile(char type, String tag, String msg) {
        if (null == logFile || !logFile.exists()) {
            return;
        }

        String log = dateFormat.format(date) + " " + type + "/" + tag + ": " + msg + "\n";

        FileOutputStream fos;
        BufferedWriter bw = null;
        try {
            fos = new FileOutputStream(logFile, true);
            bw = new BufferedWriter(new OutputStreamWriter(fos));
            bw.write(log);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null) {
                    bw.close();//关闭缓冲流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
